// SPDX-License-Identifier: MIT
// Copyright (C) 2018-present iced project and contributors

using System;
using System.Collections.Generic;
using Iced.Intel;

namespace Iced.UnitTests.Intel {
	static partial class ToEnumConverter {
		public static bool TryRegister(string value, out Register register) => registerDict.TryGetValue(value, out register);
		public static Register GetRegister(string value) => TryRegister(value, out var register) ? register : throw new InvalidOperationException($"Invalid Register value: {value}");
		public static Dictionary<string, Register> CloneRegisterDict() => new Dictionary<string, Register>(registerDict, StringComparer.Ordinal);

		static readonly Dictionary<string, Register> registerDict =
#pragma warning disable CS0618 // Type or member is obsolete
			// GENERATOR-BEGIN: RegisterHash
			// ⚠️This was generated by GENERATOR!🦹‍♂️
			new Dictionary<string, Register>(256, StringComparer.Ordinal) {
				{ "none", Register.None },
				{ "al", Register.AL },
				{ "cl", Register.CL },
				{ "dl", Register.DL },
				{ "bl", Register.BL },
				{ "ah", Register.AH },
				{ "ch", Register.CH },
				{ "dh", Register.DH },
				{ "bh", Register.BH },
				{ "spl", Register.SPL },
				{ "bpl", Register.BPL },
				{ "sil", Register.SIL },
				{ "dil", Register.DIL },
				{ "r8l", Register.R8L },
				{ "r9l", Register.R9L },
				{ "r10l", Register.R10L },
				{ "r11l", Register.R11L },
				{ "r12l", Register.R12L },
				{ "r13l", Register.R13L },
				{ "r14l", Register.R14L },
				{ "r15l", Register.R15L },
				{ "ax", Register.AX },
				{ "cx", Register.CX },
				{ "dx", Register.DX },
				{ "bx", Register.BX },
				{ "sp", Register.SP },
				{ "bp", Register.BP },
				{ "si", Register.SI },
				{ "di", Register.DI },
				{ "r8w", Register.R8W },
				{ "r9w", Register.R9W },
				{ "r10w", Register.R10W },
				{ "r11w", Register.R11W },
				{ "r12w", Register.R12W },
				{ "r13w", Register.R13W },
				{ "r14w", Register.R14W },
				{ "r15w", Register.R15W },
				{ "eax", Register.EAX },
				{ "ecx", Register.ECX },
				{ "edx", Register.EDX },
				{ "ebx", Register.EBX },
				{ "esp", Register.ESP },
				{ "ebp", Register.EBP },
				{ "esi", Register.ESI },
				{ "edi", Register.EDI },
				{ "r8d", Register.R8D },
				{ "r9d", Register.R9D },
				{ "r10d", Register.R10D },
				{ "r11d", Register.R11D },
				{ "r12d", Register.R12D },
				{ "r13d", Register.R13D },
				{ "r14d", Register.R14D },
				{ "r15d", Register.R15D },
				{ "rax", Register.RAX },
				{ "rcx", Register.RCX },
				{ "rdx", Register.RDX },
				{ "rbx", Register.RBX },
				{ "rsp", Register.RSP },
				{ "rbp", Register.RBP },
				{ "rsi", Register.RSI },
				{ "rdi", Register.RDI },
				{ "r8", Register.R8 },
				{ "r9", Register.R9 },
				{ "r10", Register.R10 },
				{ "r11", Register.R11 },
				{ "r12", Register.R12 },
				{ "r13", Register.R13 },
				{ "r14", Register.R14 },
				{ "r15", Register.R15 },
				{ "eip", Register.EIP },
				{ "rip", Register.RIP },
				{ "es", Register.ES },
				{ "cs", Register.CS },
				{ "ss", Register.SS },
				{ "ds", Register.DS },
				{ "fs", Register.FS },
				{ "gs", Register.GS },
				{ "xmm0", Register.XMM0 },
				{ "xmm1", Register.XMM1 },
				{ "xmm2", Register.XMM2 },
				{ "xmm3", Register.XMM3 },
				{ "xmm4", Register.XMM4 },
				{ "xmm5", Register.XMM5 },
				{ "xmm6", Register.XMM6 },
				{ "xmm7", Register.XMM7 },
				{ "xmm8", Register.XMM8 },
				{ "xmm9", Register.XMM9 },
				{ "xmm10", Register.XMM10 },
				{ "xmm11", Register.XMM11 },
				{ "xmm12", Register.XMM12 },
				{ "xmm13", Register.XMM13 },
				{ "xmm14", Register.XMM14 },
				{ "xmm15", Register.XMM15 },
				{ "xmm16", Register.XMM16 },
				{ "xmm17", Register.XMM17 },
				{ "xmm18", Register.XMM18 },
				{ "xmm19", Register.XMM19 },
				{ "xmm20", Register.XMM20 },
				{ "xmm21", Register.XMM21 },
				{ "xmm22", Register.XMM22 },
				{ "xmm23", Register.XMM23 },
				{ "xmm24", Register.XMM24 },
				{ "xmm25", Register.XMM25 },
				{ "xmm26", Register.XMM26 },
				{ "xmm27", Register.XMM27 },
				{ "xmm28", Register.XMM28 },
				{ "xmm29", Register.XMM29 },
				{ "xmm30", Register.XMM30 },
				{ "xmm31", Register.XMM31 },
				{ "ymm0", Register.YMM0 },
				{ "ymm1", Register.YMM1 },
				{ "ymm2", Register.YMM2 },
				{ "ymm3", Register.YMM3 },
				{ "ymm4", Register.YMM4 },
				{ "ymm5", Register.YMM5 },
				{ "ymm6", Register.YMM6 },
				{ "ymm7", Register.YMM7 },
				{ "ymm8", Register.YMM8 },
				{ "ymm9", Register.YMM9 },
				{ "ymm10", Register.YMM10 },
				{ "ymm11", Register.YMM11 },
				{ "ymm12", Register.YMM12 },
				{ "ymm13", Register.YMM13 },
				{ "ymm14", Register.YMM14 },
				{ "ymm15", Register.YMM15 },
				{ "ymm16", Register.YMM16 },
				{ "ymm17", Register.YMM17 },
				{ "ymm18", Register.YMM18 },
				{ "ymm19", Register.YMM19 },
				{ "ymm20", Register.YMM20 },
				{ "ymm21", Register.YMM21 },
				{ "ymm22", Register.YMM22 },
				{ "ymm23", Register.YMM23 },
				{ "ymm24", Register.YMM24 },
				{ "ymm25", Register.YMM25 },
				{ "ymm26", Register.YMM26 },
				{ "ymm27", Register.YMM27 },
				{ "ymm28", Register.YMM28 },
				{ "ymm29", Register.YMM29 },
				{ "ymm30", Register.YMM30 },
				{ "ymm31", Register.YMM31 },
				{ "zmm0", Register.ZMM0 },
				{ "zmm1", Register.ZMM1 },
				{ "zmm2", Register.ZMM2 },
				{ "zmm3", Register.ZMM3 },
				{ "zmm4", Register.ZMM4 },
				{ "zmm5", Register.ZMM5 },
				{ "zmm6", Register.ZMM6 },
				{ "zmm7", Register.ZMM7 },
				{ "zmm8", Register.ZMM8 },
				{ "zmm9", Register.ZMM9 },
				{ "zmm10", Register.ZMM10 },
				{ "zmm11", Register.ZMM11 },
				{ "zmm12", Register.ZMM12 },
				{ "zmm13", Register.ZMM13 },
				{ "zmm14", Register.ZMM14 },
				{ "zmm15", Register.ZMM15 },
				{ "zmm16", Register.ZMM16 },
				{ "zmm17", Register.ZMM17 },
				{ "zmm18", Register.ZMM18 },
				{ "zmm19", Register.ZMM19 },
				{ "zmm20", Register.ZMM20 },
				{ "zmm21", Register.ZMM21 },
				{ "zmm22", Register.ZMM22 },
				{ "zmm23", Register.ZMM23 },
				{ "zmm24", Register.ZMM24 },
				{ "zmm25", Register.ZMM25 },
				{ "zmm26", Register.ZMM26 },
				{ "zmm27", Register.ZMM27 },
				{ "zmm28", Register.ZMM28 },
				{ "zmm29", Register.ZMM29 },
				{ "zmm30", Register.ZMM30 },
				{ "zmm31", Register.ZMM31 },
				{ "k0", Register.K0 },
				{ "k1", Register.K1 },
				{ "k2", Register.K2 },
				{ "k3", Register.K3 },
				{ "k4", Register.K4 },
				{ "k5", Register.K5 },
				{ "k6", Register.K6 },
				{ "k7", Register.K7 },
				{ "bnd0", Register.BND0 },
				{ "bnd1", Register.BND1 },
				{ "bnd2", Register.BND2 },
				{ "bnd3", Register.BND3 },
				{ "cr0", Register.CR0 },
				{ "cr1", Register.CR1 },
				{ "cr2", Register.CR2 },
				{ "cr3", Register.CR3 },
				{ "cr4", Register.CR4 },
				{ "cr5", Register.CR5 },
				{ "cr6", Register.CR6 },
				{ "cr7", Register.CR7 },
				{ "cr8", Register.CR8 },
				{ "cr9", Register.CR9 },
				{ "cr10", Register.CR10 },
				{ "cr11", Register.CR11 },
				{ "cr12", Register.CR12 },
				{ "cr13", Register.CR13 },
				{ "cr14", Register.CR14 },
				{ "cr15", Register.CR15 },
				{ "dr0", Register.DR0 },
				{ "dr1", Register.DR1 },
				{ "dr2", Register.DR2 },
				{ "dr3", Register.DR3 },
				{ "dr4", Register.DR4 },
				{ "dr5", Register.DR5 },
				{ "dr6", Register.DR6 },
				{ "dr7", Register.DR7 },
				{ "dr8", Register.DR8 },
				{ "dr9", Register.DR9 },
				{ "dr10", Register.DR10 },
				{ "dr11", Register.DR11 },
				{ "dr12", Register.DR12 },
				{ "dr13", Register.DR13 },
				{ "dr14", Register.DR14 },
				{ "dr15", Register.DR15 },
				{ "st0", Register.ST0 },
				{ "st1", Register.ST1 },
				{ "st2", Register.ST2 },
				{ "st3", Register.ST3 },
				{ "st4", Register.ST4 },
				{ "st5", Register.ST5 },
				{ "st6", Register.ST6 },
				{ "st7", Register.ST7 },
				{ "mm0", Register.MM0 },
				{ "mm1", Register.MM1 },
				{ "mm2", Register.MM2 },
				{ "mm3", Register.MM3 },
				{ "mm4", Register.MM4 },
				{ "mm5", Register.MM5 },
				{ "mm6", Register.MM6 },
				{ "mm7", Register.MM7 },
				{ "tr0", Register.TR0 },
				{ "tr1", Register.TR1 },
				{ "tr2", Register.TR2 },
				{ "tr3", Register.TR3 },
				{ "tr4", Register.TR4 },
				{ "tr5", Register.TR5 },
				{ "tr6", Register.TR6 },
				{ "tr7", Register.TR7 },
				{ "tmm0", Register.TMM0 },
				{ "tmm1", Register.TMM1 },
				{ "tmm2", Register.TMM2 },
				{ "tmm3", Register.TMM3 },
				{ "tmm4", Register.TMM4 },
				{ "tmm5", Register.TMM5 },
				{ "tmm6", Register.TMM6 },
				{ "tmm7", Register.TMM7 },
				{ "dontuse0", Register.DontUse0 },
				{ "dontusefa", Register.DontUseFA },
				{ "dontusefb", Register.DontUseFB },
				{ "dontusefc", Register.DontUseFC },
				{ "dontusefd", Register.DontUseFD },
				{ "dontusefe", Register.DontUseFE },
				{ "dontuseff", Register.DontUseFF },
			};
			// GENERATOR-END: RegisterHash
#pragma warning restore CS0618 // Type or member is obsolete
	}
}
